package JVM.第08篇_JVM性能调优案例篇;

/**
 * -XX:+DoEscapeAnalysis   //启用逃逸分析   - 是不起用
 * -XX:+EliminateAllocations  //标量替换
 */
public class C2_标量替换 {
    public static class U{
        public int a;
        public int b;
    }
    public static void UUU(){
        U u = new U();
        u.a=1;
        u.b=2;
    }
    public static void main(String[] args) {
        /**
         * JDK 8 高版本看不出
         * -XX:+DoEscapeAnalysis   //启用逃逸分析   - 是不起用
         * -XX:+EliminateAllocations  //标量替换
         *
         * 使用 逃逸分析 和 标量替换         2-4 ms
         * 不使用逃逸分析 或 不使用标量替换     29 ms
         * 逃逸分析和标量替换   是相辅相成的,缺一不可
         */
        long sta = System.currentTimeMillis();
        for (int i=0;i<100000000;i++){
            UUU();
        }
        System.out.println(System.currentTimeMillis()-sta);

    }
    private static void A(){
        P p = new P(1,2);
        System.out.println(p.x);
        System.out.println(p.y);
    }
    //可能变成
    private static void B(){
        int a = 1;
        int b = 2;
        System.out.println(a);
        System.out.println(b);
    }


}
class P{
    public P(int x,int y){
        this.x = x;
        this.y = y;
    }
    public int x;
    public int y;
}
